package com.ms.oschina.view;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;

import com.ms.oschina.R;
import com.ms.oschina.util.StringUtils;
import com.ms.oschina.util.UiUtils;

public class EmailAutoCompleteTextView extends AutoCompleteTextView {

	private static final String TAG = "EmailAutoCompleteTextView";

	private String[] emailSufixs = new String[] { "@qq.com", "@163.com",
			"@126.com", "@gmail.com", "@sina.com", "@hotmail.com", "@yahoo.cn",
			"@sohu.com", "@foxmail.com", "@139.com", "@yeah.net",
			"@vip.qq.com", "@vip.sina.com" };

	public EmailAutoCompleteTextView(Context context) {
		super(context);
		init(context);
	}

	public EmailAutoCompleteTextView(Context context, AttributeSet attrs) {
		super(context, attrs);
		init(context);
	}

	public EmailAutoCompleteTextView(Context context, AttributeSet attrs,
			int defStyle) {
		super(context, attrs, defStyle);
		init(context);
	}

	public void setAdapterString(String[] es) {
		if (es != null && es.length > 0)
			this.emailSufixs = es;
	}

	private void init(final Context context) {

		ArrayAdapter<String> adapter = new ArrayAdapter<String>(context,
				android.R.layout.simple_dropdown_item_1line, emailSufixs);
		this.setAdapter(adapter);
		
		this.setThreshold(7);
		
		int dimensionPixelSize = UiUtils.getDimensionPixelSize(R.dimen.space_300);
		setDropDownHeight(dimensionPixelSize);
		
		this.setOnFocusChangeListener(new OnFocusChangeListener() {
			@Override
			public void onFocusChange(View v, boolean hasFocus) {
				if (hasFocus) {
					String text = EmailAutoCompleteTextView.this.getText()
							.toString();
					// 当该文本域重新获得焦点后，重启自动完成
					if (!"".equals(text))
						performFiltering(text, 0);
				} else {
					// 当文本域丢失焦点后，检查输入email地址的格式
					EmailAutoCompleteTextView ev = (EmailAutoCompleteTextView) v;
					String text = ev.getText().toString();
					if (text != null && StringUtils.isEmail(text)) {

					} else {
						UiUtils.showToast("邮件地址格式不正确");
					}
				}
			}
		});
	}

	/**
	 * 点击某个邮箱条目时发生调用 
	 * 进行替换得文字。
	 * @param text 点击的条目文字 如： @qq.com
	 */
	@Override
	protected void replaceText(CharSequence text) {
		Log.i(TAG + " replaceText", text.toString());
		String t = this.getText().toString();
		super.replaceText(t + text);
	}

	@Override
	protected void performFiltering(CharSequence text, int keyCode) {
		// 该方法会在用户输入文本之后调用，将已输入的文本与adapter中的数据对比，若它匹配
		// adapter中数据的前半部分，那么adapter中的这条数据将会在下拉框中出现
		// 因为用户输入邮箱时，都是以字母，数字开始，而我们的adapter中只会提供以类似于"@163.com"
		// 的邮箱后缀，因此在调用super.performFiltering时，传入的一定是以"@"开头的字符串
		Log.i(TAG + " performFiltering", text.toString());
		String str = this.getText().toString();
		if(str.contains("@")){
			 this.dismissDropDown();
		}else{
			super.performFiltering("", keyCode);
			
			//参数一： 根据adapter中的文字进行匹配规则 @16  ，只会显示@163.com
//			super.performFiltering("@16", keyCode);
		}
	}

}